/**
 * 
 */
package cn.biplam.common.bean.sqlengine;

import java.io.Serializable;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.sqlresult.SqlResult;

/**
 * Sql规则Bean
 */
public abstract class SqlRuleBean extends Bean implements Serializable{
	
	/**
	 * 返回业务模型字段是否被规则引用<BR>
	 * @param fieldId
	 * @return String 被引用的原因说明，如果==null表示未引用
	 * @throws ErrorMessage
	 */
	public abstract String ModelFieldRef(String fieldId) throws ErrorMessage;
	
	/**
	 * 返回业务模型字段被规则关联字段引用的规则列表<BR>
	 * 用于在主键中删除一个主键字段时的判断(不是删除字段)<BR>
	 * 返回内容:IndexTableStruc.NODE_NAME,NODE_DESC
	 * @param fieldId		业务对象模型字段ID
	 * @return SqlResult
	 */
	public abstract SqlResult ModelFieldRefInRule(String fieldId) throws ErrorMessage;
	

	/**
	 * 返回业务模型表被'表关联过滤'作为主表引用 的规则列表<BR>
	 * 返回内容:IndexTableStruc.NODE_NAME,NODE_DESC<BR>
	 * 表关联过滤的主表被引用后，其主键不能再被修改
	 * @param tableId		业务对象表ID
	 * @return SqlResult
	 */
	public abstract SqlResult ModelTableRefByJoinFilter(String tableId) throws ErrorMessage;

	/**
	 * 返回新建的实例
	 * @param userId	用户ID
	 * @return SqlRuleBean
	 * @throws ErrorMessage
	 */
	public static SqlRuleBean getNewInstance(String userId) throws ErrorMessage{
		return (SqlRuleBean)get(SqlRuleBean.class.getSimpleName(), userId);
	}

}
